#include "display.h"
#include "Inc/bsp_lcd_st7789.h"

typedef struct{
    lv_obj_t * cont;
    lv_style_t style;
}AppWindow_TypeDef;

static AppWindow_TypeDef appWindow_Grp[PAGE_MAX];
static PageList_TypeDef PageList[PAGE_MAX];


/*页面注册器*/
#define PAGE_REG(name)\
do{\
    extern void page_register_##name(uint8_t pageID);\
    page_register_##name(PAGE_##name);\
}while(0)


static void page_init(void)
{
    PAGE_REG(Startup);
    PAGE_REG(Home);
    PAGE_REG(Menu);
    
    // 打开启动页
    page_push(PAGE_Startup);
}

lv_obj_t * AppWindow_GetCont(uint8_t pageID)
{
    return (pageID < PAGE_MAX) ? appWindow_Grp[pageID].cont : NULL;
}

lv_coord_t AppWindow_GetHeight()
{
    return (lv_obj_get_height(lv_scr_act()));
}

lv_coord_t AppWindow_GetWidth()
{
    return (lv_obj_get_width(lv_scr_act()));
}

void AppWindow_Create()
{
    for(int i = 0; i < PAGE_MAX; i++)
    {
        appWindow_Grp[i].cont = lv_obj_create(lv_scr_act());
        lv_obj_remove_style_all(appWindow_Grp[i].cont);  // 清除所有默认样式
        lv_obj_clear_flag(appWindow_Grp[i].cont, LV_OBJ_FLAG_SCROLLABLE);    
        lv_obj_set_size(appWindow_Grp[i].cont, LV_HOR_RES, LV_VER_RES);

        // 设置背景为纯黑
        lv_obj_set_style_border_width(appWindow_Grp[i].cont, 0, LV_PART_MAIN); // 设置内边框为0
        lv_obj_set_style_bg_color(appWindow_Grp[i].cont, lv_color_black(), LV_PART_MAIN); // 设置背景黑
        lv_obj_set_style_bg_opa(appWindow_Grp[i].cont, LV_OPA_COVER, LV_PART_MAIN); // 不透明度100%

    }

}


void display_init(void)
{
    
    /*lvgl初始化*/
    lv_init();	    
    lv_port_disp_init();	
    lv_port_indev_init();
//    lv_demo_widgets();
    // lv_demo_benchmark();
    // lv_theme_set_current(lv_theme_night_init(200, NULL));
    AppWindow_Create();
    /*page manager初始化*/
    page_manager_init(PageList, PAGE_MAX);
    page_init();

    bsp_lcd_backlight_on(); // 背光开

}


void display_update(void)
{
    page_run();
    lv_task_handler(); /* call lvgl task handler */
}































